草庐IT

c++ - RAII 和 C++ STL

全部标签

c++ - STL::multimap - 我如何获取数据组?

Multimap本质上具有按键排序的数据组。我想要一种方法,通过它我可以访问这些单独的组并获取它们的汇总值。例如,在std::multimap我存储{"Group1",1},{"Group1",2},{"Group1",3},{"Group2",10},{"Group2",11},{"Group2",12}存储了这些值后,我应该能够迭代这个multimap并获得每个“组”的聚合值。问题是STL中没有定义任何函数来以这种方式访问​​MultiMaps。我可以使用lower_bound,upper_bound手动迭代multimap并汇总组的内容,但我希望在STL中已经定义了更好的方法?任

c++ - 如何遍历/迭代 STL 映射?

我想遍历一个STL映射。我不想使用它的key。我不关心排序,我只是寻找一种访问它包含的所有元素的方法。我该怎么做? 最佳答案 是的,您可以遍历标准库map。这是用于遍历map的基本方法,可作为遍历任何标准库集合的指南:C++03/C++11:#include#include#includeusingnamespacestd;intmain(){typedefmapMyMap;MyMapmy_map;//...magicfor(MyMap::const_iteratorit=my_map.begin();it!=my_map.end(

c++ - 如何遍历/迭代 STL 映射?

我想遍历一个STL映射。我不想使用它的key。我不关心排序,我只是寻找一种访问它包含的所有元素的方法。我该怎么做? 最佳答案 是的,您可以遍历标准库map。这是用于遍历map的基本方法,可作为遍历任何标准库集合的指南:C++03/C++11:#include#include#includeusingnamespacestd;intmain(){typedefmapMyMap;MyMapmy_map;//...magicfor(MyMap::const_iteratorit=my_map.begin();it!=my_map.end(

c++ - C、C++ 中的内存泄漏;忘记免费了,删除

我们在C中使用malloc分配内存,在C++中使用new。我知道分配的内存必须在C中使用free释放或返回给操作系统,并在C++中删除。如果我在分配内存后忘记使用free/delete,这意味着会有内存泄漏。现在,我的问题是,这种内存泄漏是否仅在程序执行期间?还是永久泄漏/丢失,还是在我重新启动系统后再次获得?内部流程到底是什么?内存泄漏/丢失究竟是什么意思?如果有人能详细解释这一点或提供一些不错的引用资料,我将不胜感激。更新1看了一些答案,我了解到内存在程序终止后归还给操作系统/系统,如果是这样,为什么每个人都需要如此关心内存泄漏,为什么防止内存泄漏非常重要?更新2所以,应该防止内存

c++ - C、C++ 中的内存泄漏;忘记免费了,删除

我们在C中使用malloc分配内存,在C++中使用new。我知道分配的内存必须在C中使用free释放或返回给操作系统,并在C++中删除。如果我在分配内存后忘记使用free/delete,这意味着会有内存泄漏。现在,我的问题是,这种内存泄漏是否仅在程序执行期间?还是永久泄漏/丢失,还是在我重新启动系统后再次获得?内部流程到底是什么?内存泄漏/丢失究竟是什么意思?如果有人能详细解释这一点或提供一些不错的引用资料,我将不胜感激。更新1看了一些答案,我了解到内存在程序终止后归还给操作系统/系统,如果是这样,为什么每个人都需要如此关心内存泄漏,为什么防止内存泄漏非常重要?更新2所以,应该防止内存

c++ - 插入到 STL 映射是否会使其他现有迭代器失效?

我在STL中使用了std::map。我可以在将其他元素插入map后使用迭代器吗?还有效吗? 最佳答案 如果对容器操作的语义有疑问,请咨询thedocumentation:Maphastheimportantpropertythatinsertinganewelementintoamapdoesnotinvalidateiteratorsthatpointtoexistingelements.Erasinganelementfromamapalsodoesnotinvalidateanyiterators,except,ofcours

c++ - 插入到 STL 映射是否会使其他现有迭代器失效?

我在STL中使用了std::map。我可以在将其他元素插入map后使用迭代器吗?还有效吗? 最佳答案 如果对容器操作的语义有疑问,请咨询thedocumentation:Maphastheimportantpropertythatinsertinganewelementintoamapdoesnotinvalidateiteratorsthatpointtoexistingelements.Erasinganelementfromamapalsodoesnotinvalidateanyiterators,except,ofcours

c++ - 指针作为映射 C++ STL 中的键

我有一个关于在map中用作键时如何处理指向自定义对象的指针的问题。更具体地说,如果我定义std::mapfoo;默认的C++实现可以处理这些指针吗?还是我需要定义一个自定义比较器函数来处理它?一般来说,使用指向对象的指针作为键是一种好习惯吗? 最佳答案 默认实现会比较指针存储的地址,所以不同的对象会被认为是不同的键。但是,不会考虑对象的逻辑状态。例如,如果使用std::string*作为key,则两个不同的std::string对象具有相同的"Hello"将被视为不同的键!(当按他们的地址存储在map中时)只要你理解上面的重要区别,

c++ - 指针作为映射 C++ STL 中的键

我有一个关于在map中用作键时如何处理指向自定义对象的指针的问题。更具体地说,如果我定义std::mapfoo;默认的C++实现可以处理这些指针吗?还是我需要定义一个自定义比较器函数来处理它?一般来说,使用指向对象的指针作为键是一种好习惯吗? 最佳答案 默认实现会比较指针存储的地址,所以不同的对象会被认为是不同的键。但是,不会考虑对象的逻辑状态。例如,如果使用std::string*作为key,则两个不同的std::string对象具有相同的"Hello"将被视为不同的键!(当按他们的地址存储在map中时)只要你理解上面的重要区别,

c++ - STL 的 list::sort() 使用哪种排序算法?

我有一个随机整数列表。我想知道list::sort()方法使用哪种算法。例如。在以下代码中:listmylist;//..insertamillionvaluesmylist.sort();编辑:另见thismorespecificquestion. 最佳答案 该标准不需要特定的算法,只是它必须是稳定的,并且它使用大约NlgN比较来完成排序。例如,这允许快速排序的合并排序或链表版本(与流行的看法相反,快速排序并非必然不稳定,尽管数组最常见的实现是)。有了这个附带条件,简短的回答是,在大多数当前的标准库中,std::sort被实现为一